home *** CD-ROM | disk | FTP | other *** search
/ Nejlepší hry / Nejlepsi hry.iso / hry / sea of chaos / sea_install.msi / _15C39AAA7726369D39812BD40F01CF6A / _A00F65CAE1224EE99A35E0CAD0F28D36 < prev    next >
Text File  |  2005-03-04  |  1KB  |  60 lines

  1. //simple per-pixel phong shading
  2. //1 directional light applied
  3.  
  4. //Luke Lenhart
  5. //(C)2004-2005 Digipen Institute of Technology
  6.  
  7. //directional light (assumed to be the sun)
  8. float4 lgtDirection;
  9. float4 lgtDiffuse;
  10. float4 lgtAmbient;
  11.  
  12. //position of the eye
  13. float4 posEye;
  14.  
  15. //base texture
  16. sampler2D sampTex;
  17.  
  18. //specular hardness and amount of specular to use
  19. float specHard;
  20. float specAmount;
  21.  
  22. //shader input
  23. struct PS_INPUT
  24. {
  25.     float3 Normal : TEXCOORD2;
  26.     float3 Pos : TEXCOORD1;
  27.     float2 Tex0 : TEXCOORD0;
  28.     float4 Clr : COLOR;
  29. };
  30.  
  31. float4 PShader(PS_INPUT In) : COLOR
  32. {
  33.     In.Normal.xyz=normalize(In.Normal.xyz);
  34.  
  35.     //calc diffuse
  36.     float3 diff=lgtDiffuse.xyz*dot(lgtDirection.xyz,In.Normal.xyz)*tex2D(sampTex,In.Tex0);
  37.     
  38.     //calc specular
  39.     //float3 dirEye=normalize(posEye.xyz-In.Pos.xyz);
  40.     //float3 spec=saturate(sin(3.1415*dot(reflect(-lgtDirection.xyz,In.Normal.xyz),dirEye)));
  41.     //spec=pow(spec,15);
  42.     
  43.     float3 dirEye=normalize(posEye.xyz-In.Pos.xyz);
  44.     float3 rNorm=reflect(-lgtDirection.xyz,In.Normal.xyz);
  45.     float3 spec=saturate(dot(rNorm,dirEye));
  46.     //spec=cos((1-spec)*3.14159f*0.5f);
  47.     spec=pow(sin(spec*3.14159f*0.5f),specHard);
  48.     
  49.     
  50.     //mix
  51.     float4 clr;
  52.     clr.xyz=lgtAmbient.xyz + diff + specAmount*spec;
  53.     
  54.     clr.a=1;
  55.     clr*=In.Clr;
  56.         
  57.     //return final color
  58.     return clr;
  59. }
  60.